import evn from "../../utils/http/evn"
import {
  apiAddReseve
} from "../../utils/http/api"; // 导入预约提交接口
const api = require('../../utils/http/api')

// 身份证号与手机号校验工具函数
function isValidChineseID(id) {
  if (!id) return false;
  const upper = String(id).toUpperCase();
  const reg18 = /^\d{17}[\dX]$/;
  if (!reg18.test(upper)) return false;
  // 出生日期校验
  const year = Number(upper.substr(6, 4));
  const month = Number(upper.substr(10, 2));
  const day = Number(upper.substr(12, 2));
  const dob = new Date(`${year}-${month}-${day}`);
  if (
    !(dob instanceof Date) ||
    Number.isNaN(dob.getTime()) ||
    dob.getFullYear() !== year ||
    dob.getMonth() + 1 !== month ||
    dob.getDate() !== day
  ) {
    return false;
  }
  // 校验位校验
  const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
  const sum = upper
    .slice(0, 17)
    .split('')
    .reduce((acc, cur, idx) => acc + Number(cur) * weights[idx], 0);
  const code = checkCodes[sum % 11];
  return upper[17] === code;
}

function isValidMobile(mobile) {
  if (!mobile) return false;
  return /^1[3-9]\d{9}$/.test(String(mobile));
}

Page({
  /**
   * 页面的初始数据
   */
  data: {
    selectedDate: '',
    imgBaseUrl: evn.dev.imgUrl,
    userInfo: {}, // 缓存的用户信息
    schoolId: '', // 参观学校及校区的ID
    // 预约表单字段（与后端BizReserve实体类字段一一对应）
    schoolName: '', // 参观学校及校区
    visitorNum: '', // 参观人数
    professions: '', // 意向专业
    name: '', // 参观者姓名
    idNumber: '', // 身份证号/护照号
    phoneNumber: '', // 联系电话
    note: '' // 备注/特殊需求
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 加载缓存中的用户信息
    const userInfo = wx.getStorageSync('userInfo') || {};
    this.setData({ userInfo });
    // 从分享或跳转参数中读取 schoolId / schoolName
    if (options.schoolId) {
      this.setData({ schoolId: options.schoolId });
    }
    if (options.schoolName) {
      this.setData({ schoolName: decodeURIComponent(options.schoolName) });
    }
    // 若未登录，跳转至登录页
    // if (!userInfo.id) {
    //   wx.reLaunch({ url: '/pages/index/login' });
    // }
    if (options.schoolName) {
      this.setData({
        schoolName: decodeURIComponent(options.schoolName)
      });
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    const userInfo = wx.getStorageSync('userInfo') || {};
    console.log('进入onShow，userInfo:', userInfo);
    if (!userInfo.id) {
      this.setData({
        hasUnreadCommentMsg: false,
        hasUnreadTabbarMsg: false
      });
      wx.setStorageSync('hasUnreadTabbarMsg', false);
      return;
    }
    // 实时调用未读消息计数接口（复用原有逻辑）
    api.apiGetUnreadCountPublic({
        userId: userInfo.id
      })
      .then(res => {
        console.log('apiGetUnreadCountPublic返回：', res);
        const count = typeof res === 'object' && res.count !== undefined ? res.count : res;
        const hasUnread = Number(count) > 0;
        this.setData({
          hasUnreadCommentMsg: hasUnread,
          hasUnreadTabbarMsg: hasUnread
        });
        wx.setStorageSync('hasUnreadTabbarMsg', hasUnread);
      })
      .catch((err) => {
        console.error('apiGetUnreadCountPublic异常：', err);
        this.setData({
          hasUnreadCommentMsg: false,
          hasUnreadTabbarMsg: false
        });
        wx.setStorageSync('hasUnreadTabbarMsg', false);
      });
  },

  /**
   * 日期选择器事件
   */
  bindDateChange: function (e) {
    this.setData({
      selectedDate: e.detail.value
    });
  },

  /**
   * 表单输入事件（对应各个字段）
   */
  getSchoolName(e) {
    this.setData({
      schoolName: e.detail.value
    });
  },
  getVisitorNum(e) {
    this.setData({
      visitorNum: e.detail.value
    });
  },
  getProfessions(e) {
    this.setData({
      professions: e.detail.value
    });
  },
  getName(e) {
    this.setData({
      name: e.detail.value
    });
  },
  getIdNumber(e) {
    this.setData({
      idNumber: e.detail.value
    });
  },
  getPhoneNumber(e) {
    this.setData({
      phoneNumber: e.detail.value
    });
  },
  getNote(e) {
    this.setData({
      note: e.detail.value
    });
  },

  /**
   * 核心：提交预约（调用后端add接口）
   */
 addReserve() {
    const {
      userInfo,
      schoolName,
      selectedDate,
      visitorNum,
      professions,
      name,
      idNumber,
      phoneNumber,
      note
    } = this.data;

    // 1. 表单校验（必填项检查）
    if (!schoolName) {
      wx.showToast({
        title: '请输入参观学校及校区',
        icon: 'none'
      });
      return;
    }
    if (!selectedDate) {
      wx.showToast({
        title: '请选择预计参观日期',
        icon: 'none'
      });
      return;
    }
    if (!visitorNum || isNaN(visitorNum) || Number(visitorNum) <= 0) {
      wx.showToast({
        title: '请输入有效的参观人数',
        icon: 'none'
      });
      return;
    }
    if (!professions) {
      wx.showToast({
        title: '请输入意向专业',
        icon: 'none'
      });
      return;
    }
    if (!name) {
      wx.showToast({
        title: '请输入姓名',
        icon: 'none'
      });
      return;
    }
    if (!idNumber) {
      wx.showToast({
        title: '请输入身份证号',
        icon: 'none'
      });
      return;
    }
    if (!isValidChineseID(idNumber)) {
      wx.showToast({
        title: '身份证号格式不正确',
        icon: 'none'
      });
      return;
    }
    if (!isValidMobile(phoneNumber)) {
      wx.showToast({
        title: '请输入有效的联系电话',
        icon: 'none'
      });
      return;
    }

    // 2. 组装接口参数（与后端BizReserve实体类完全匹配）
    const reserveParams = {
      userId: userInfo.id, // 用户ID（从缓存获取）
      schoolName: schoolName, // 参观学校及校区
      reserveDate: selectedDate, // 预约日期（yyyy-MM-dd格式，匹配后端）
      visitorNum: Number(visitorNum), // 参观人数（转数字类型，匹配后端Long）
      professions: professions, // 意向专业
      name: name, // 姓名
      idNumber: idNumber, // 身份证号/护照号
      phoneNumber: phoneNumber, // 联系电话
      note: note // 备注
    };

    // 3. 调用后端add接口提交数据
    wx.showLoading({
      title: '提交中...'
    });
    apiAddReseve(reserveParams)
      .then(res => {
        wx.hideLoading();
        if (res.code==200) {
          wx.showToast({
            title: '预约提交成功',
            icon: 'success',
            duration: 1500
          });
          setTimeout(() => {
            const pages = getCurrentPages();
            const { schoolId } = this.data;
            const targetUrl =  `/pages/schools/schools?schoolId=${schoolId}`;
            if (pages && pages.length > 1) {
              wx.navigateBack();
            } else {
              wx.reLaunch({ url: targetUrl });
            }
          }, 1500);
        } else {
          wx.showToast({
            title: res.msg || '预约提交失败',
            icon: 'none'
          });
        }
      })
      .catch(err => {
        wx.hideLoading();
        console.error('预约接口调用异常：', err);
        wx.showToast({
          title: '网络异常，请稍后重试',
          icon: 'none'
        });
      });
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    // 分享路径带上 schoolId，保证对方填写后也能跳回对应大学详情页
    const { schoolId, schoolName } = this.data;
    const query = [];
    if (schoolId) query.push(`schoolId=${encodeURIComponent(schoolId)}`);
    if (schoolName) query.push(`schoolName=${encodeURIComponent(schoolName)}`);
    const path = `/pages/reserve/reserve${query.length ? `?${query.join('&')}` : ''}`;
    return {
      title: '探校预约',
      path
    };
  }
})